Python字符串

207次阅读
没有评论

共计 5503 个字符,预计需要花费 14 分钟才能阅读完成。

Python 3 字符串默认是 16 位 Unicode 编码,使用 ord()可将字符串转成对应的 Unicode 码,使用 chr()可将十进制数转成对应字符。

字符串函数

startswith()

v = 'abcdefg'
result = v.startswith('ab') # 是否以 ab 开头,返回布尔值
result1 = v.endswith('g') # 是否以 g 结尾,返回布尔值
print(result) # 结果为:True
print(result) # 结果为:True

isdecimal()

v = 'a'
v1 = '1'
v2 = 'u00b2'
v3 = '一千'
print(v.isdecimal()) # 是否为十进制数(整数),结果为:False
print(v1.isdecimal()) # 结果为:True
print(v2.isdigit()) # 结果为:True
print(v3.isnumeric()) # 可判断汉字数字,结果为:True

strip()

v = '123 abc'
result = v.strip() # 去除字符串两边的空格、换行符、制表符
print(result) # 结果为:123 abc

lstrip()去除左边空白,rstrip()去除右边空白。

v = 'a123 abca'
result = v.strip('a1') # 去除字符串两边指定的内容
print(result) # 结果为:23 abc

isspace 判断字符串是否是一个由空格组成的字符串。

大小写转换

upper()变大写,变小写为 lower()

v = '123abc'
result = v.upper()
print(result) # 结果为:123ABC

将字符串转换为词首大写:

>>> s = 'I love python!'
>>> s.title()
'I Love Python!'

swapcase()对字符串的大小写字母进行转换,即将大写字母转换为小写字母,小写字母转换为大写字母。

capitalize()把字符串的第一个字符大写。

istitle 判断字符串是否是一个标题类型。isupper、islower 判断字符串中的字母是否都是大 / 小写。

replace()

v = '123abc'
result = v.replace('123', '456') # 字符串内容替换
print(result) # 结果为:456abc

translate()

这个方法的优势在于能够同时替换多个字符,因此效率比 replace 高。

使用 translate 前须先创建一个转换表,指出不同 Unicode 码点之间的转换关系。要创建转换表,可用字符串类型 str 调用方法 maketrans。

>>> table = str.maketrans('cs', 'kz')
>>> s = 'this is an incredible test'
>>> s.translate(table)
'thiz iz an inkredible tezt'

调用方法 maketrans 时,还有可选的第三个参数,指定要将哪些字母删除:

>>> table = str.maketrans('cs', 'kz', ' ')
>>> s.translate(table)
'thizizaninkredibletezt'

split()

v = '123|abc|456'
result = v.split('|') # 字符串切割,返回列表
print(result) # ['123', 'abc', '456']

result = v.split('|', 1) # 指定切割几次,返回列表
print(result) # 结果为:['123', 'abc|456']

v = '123|abc|456'
result = v.rsplit('|', 1) # 从右向左切割,返回列表
print(result) # 结果为:['123|abc', '456']

s = "hello|world"
print(s.partition("|"))  # ('hello', '|', 'world')

partition()按分隔符切分字符串,返回一个包含三个成员的元组:(part_before, sep, part_after),分别代表分隔符前内容、分隔符以及分隔符后内容。

join()

v = ['123', 'abc', '456']
result = '|'.join(v) # 字符串拼接
print(result) # 结果为:123|abc|456

早期 Python,使用字符串拼接符 +=,会生成新的字符串对象,因此不推荐使用 + 来拼接字符串。推荐使用 join 函数,因为 join 函数在拼接字符串之前会计算所有字符串的长度,然后逐一拷贝,仅新建一次对象。

但是,在 2.2 版本之后,Python 专门针对它做了性能优化,大大提升了其执行效率。如今,使用 += 拼接字符串基本已经和 join()一样快了。

encode()

v = '编程' # Unicode,字符串类型
result = v.encode('utf-8') # utf-8,字节类型
result2 = v.encode('gbk') # gbk,字节类型
print(result) # 结果为:b'xe7xbcx96xe7xa8x8b'
print(result2) # 结果为:b'xb1xe0xb3xcc'

v2 = result2.decode('gbk')
print(v2) # 结果为:编程

find()

在字符串中查找子串。如果找到,返回索引,否则返回 -1。

>>> s = 'I Love Python!'
>>> s.find('ve')
4
>>> s.find('i')
-1
>>> s.find('ve', 5) # 指定搜索的起点
-1
>>> s.find('ve', 1, 6) # 指定搜索的起点和终点
4

find 找不到元素,会返回 -1。index 找不到元素,会导致程序报错。

center()

v = '编程'
result = v.center(10, '-') # 字符串内容居中显示
result2 = v.ljust(10, '-') # 居左
result3 = v.rjust(10, '-') # 居右
print(result) # 结果为:---- 编程 ----
print(result2) # 结果为:编程 --------
print(result3) # 结果为:-------- 编程

zfill()

v = '编程'
result = v.zfill(10) # 填充 0
print(result) # 结果为:00000000 编程

removeprefix()

从字符串中删除前缀,removesuffix()剔除字符串的后缀。

s = "https://www.baidu.com/"
s2 = s.removeprefix("https://")
print(s2)  # www.baidu.com/
s3 = s2.removesuffix("/")
print(s3)  # www.baidu.com

字符串格式化

插值格式字符串

插值格式字符串(interpolated format string,简称 f -string),是 Python 3.6 添加的新特性。如果使用 Python 3.6 或更高版本,请使用 f -string。

{}内冒号右侧所采用的那套规则,也可以用到 f -string 里面。

name = "李小龙"
age = 18
height = 1.666
formatted = f"我叫{name},明年 {age + 1 =} 岁,身高 {height:.2f} 米。"
print(formatted)  # 我叫李小龙,明年 age + 1 = 19 岁,身高 1.67 米。# 要在 f -string 中包含大括号字符,可以使用额外的大括号来转义它
print(f"我叫{{name}}")  # 我叫{name}

pi = "π"
print(f"{pi!s} {pi!r} {pi!a}") # π 'π' '\u03c0'

通过! 符号把值转化成 Unicode 及(s、r 和 a,str、repr 和 ascii)形式的字符串。

也可以把 f -string 写成多行的形式:

peoples = [("张三", 2), ("李四", 25), ("王五", 300)]
for i, (item, count) in enumerate(peoples):
    print(f"#{i+1}:" f"{item[0]:<2s} =" f"{count:>4d}")
"""
#1:张  =    2
#2:李  =   25
#3:王  =  300
"""

Python 表达式也可以出现在格式说明符中:

places = 2
number = 3.14159
print(f"My nunmer is {number:.{places}f}")

进制转换:

t1 = f"我今年 {18} 岁"
print(t1)  # 我今年 18 岁

t2 = f"我今年 {18:#b} 岁"
print(t2)  # 我今年 0b10010 岁

t3 = f"我今年 {18:#o} 岁"
print(t3)  # 我今年 0o22 岁

t4 = f"我今年 {18:#x} 岁"
print(t4)  # 我今年 0x12 岁

在日常编码中,推荐优先使用 f -string,搭配 str.format 作为补充,想必能满足绝大多数的字符串格式化需求。

%

Python 常见的数据类型占位:

  • %s:字符串占位
  • %d:整数占位
  • %f:浮点型占位

可以使用辅助符号“m.n”来控制数据的宽度和精度。

name = "李小龙"
age = 18
height = 1.666
text = "我叫 %s,今年 %4d 岁,身高 %3.2f" % (name, age, height)
print(text)  # 结果为:我叫李小龙,今年  18 岁,身高 1.67

百分比

# %% 输出 %
text = '%s,我已经下载 99%% 了' %'李小龙'
print(text) # 李小龙,我已经下载 99% 了

format()

>>> a = "名字是:{0},年龄是:{1}"
>>> a.format('张三', 18)
'名字是:张三,年龄是:18'

>>> b = "名字是:{name},年龄是:{age}"
>>> b.format(age = 18, name = '张三')
'名字是:张三,年龄是:18'

>>> c = "姓名:{name},年龄:{1},性别:{sex}, 爱好:{0}"
>>> c.format(666, 2, name='张三', sex='男')
'姓名:张三,年龄:2,性别:男, 爱好:666'

在使用 format 字符串格式化时,也可以这样操作:

s1 = "名字是:{},年龄是:{}".format(*['张三', 18])
print(s1) # 结果为:名字是:张三,年龄是:18

s2 = "名字是:{name},年龄是:{age}".format(**{'name':'张三', 'age':18})
print(s2) # 结果为:名字是:张三,年龄是:18

要在最终结果中包含花括号,可在格式字符串中使用两个花括号(即{{或}})来指定。

s = "名字是:{{0}},年龄是:{{1}}".format()
print(s) # 结果为:名字是:{0},年龄是:{1}

基本转换

>>> print("{pi!s} {pi!r} {pi!a}".format(pi="π"))
π 'π' 'u03c0'

三个标志(s、r 和 a)指定分别使用 str、repr 和 ascii 进行转换。函数 str 通常创建外观普通的字符串版本。函数 repr 尝试创建给定值的 Python 表示。函数 ascii 创建只包含 ASCII 字符的表示。

填充与对齐

:后面带填充的字符(只能一个字符,不指定默认是空格)
^、<、> 分别是居中、左对齐、右对齐,后面带宽度

>>> c = "名字是:{name},年龄是:{age:*^8}"
>>> c.format(age = 18, name = '张三')
'名字是:张三,年龄是:***18***'

说明符 =,指定将填充字符放在符号和数字之间。

>>> print("{0:*=8.2f}".format(-3.14))
-***3.14

浮点数用 f,整数用 d 进行格式化,具体如下:

>>> a = "名字是:{0},存款有:{1:.2f}"
>>> a.format('张三', 200.2222)
'名字是:张三,存款有:200.22'

>>> b = "名字是:{0},存款有:{1:0>8d}"
>>> b.format('张三', 200)
'名字是:张三,存款有:00000200'

str 和 repr

str 能以合理的方式将值转换为用户能够看懂的字符串,而 repr 通常会获得值的合法 Python 表达式表示。

>>> s = 'Hello, nworld!'
>>> print(repr(s))
'Hello, nworld!'
>>> print(str(s))
Hello,
world!

str 是一个类,但 repr 是一个函数。

长字符串、原始字符串

要表示很长的字符串(跨越多行的字符串),可使用三引号。

>>> print(''' 我是
... 李
... 小
... 龙 ''')
我是
李
小
龙

常规字符串也可横跨多行,只要在行尾加上反斜杠,反斜杠和换行符将被转义,即被忽略。

>>> print(' 我是 \
... 李小龙 ')
我是李小龙

原始字符串 用前缀 r 表示。可在原始字符串中包含任何字符,一个例外是,引号需要像通常那样进行转义,但这意味着用于执行转义的反斜杠也将包含在最终的字符串中。

>>> print("Let\'s go!")
Let's go!
>>> print(r"Let\'s go!")
Let\'s go!

另外,原始字符串不能以单个反斜杠结尾。如果要指定以反斜杠结尾的原始字符串(如以反斜杠结尾的 DOS 路径),该如何办呢?

>>> print(r'C:\hello''\\')
C:\hello\

驻留机制

几种情况:

  1. 字符串在编译时驻留,而非运行时
  2. 字符串长度为 0 或 1 时
  3. 字符串由 26 个英文字母大小写,0-9,_组成时
  4. [-5, 256]整数数字

sys 中的 intern 方法可以强制 2 个字符串指向同一个对象。

PyCharm 对字符串进行了优化处理。

正文完
 0
阿伯手记
版权声明:本站原创文章,由 阿伯手记 于2023-08-14发表,共计5503字。
转载说明:本站原创内容,除特殊说明外,均基于 CC BY-NC-SA 4.0 协议发布,转载须注明出处与链接。
评论(没有评论)
验证码

阿伯手记

阿伯手记
阿伯手记
喜欢编程,头发渐稀;成长路上,宝藏满地
文章数
766
评论数
204
阅读量
448913
今日一言
-「
热门文章
职场救急!AI请假话术生成器:1秒定制高通过率理由

职场救急!AI请假话术生成器:1秒定制高通过率理由

超级借口 不好开口?借口交给我!智能生成工作请假、上学请假、饭局爽约、约会拒绝、邀约推辞、万能借口等各种借口理...
夸克网盘快传助手提高非VIP下载速度

夸克网盘快传助手提高非VIP下载速度

夸克网盘限速这个大家都知道,不开会员差不多限速在几百 K。那有没有办法在合法合规途径加速下载夸克网盘呢?这里推...
国内已部署DeepSeek模型第三方列表 免费满血版联网搜索

国内已部署DeepSeek模型第三方列表 免费满血版联网搜索

本文收集了目前国内已部署 DeepSeek 模型的第三方列表,个个都是免费不限次数的满血版 DeepSeek,...
巴别英语:用美剧和TED演讲轻松提升英语听力与口语

巴别英语:用美剧和TED演讲轻松提升英语听力与口语

还在为枯燥的英语学习而烦恼吗?巴别英语通过创新的美剧学习模式,让英语学习变得生动有趣。平台提供海量美剧和 TE...
Chinese Name Generator 在线中文姓名生成器

Chinese Name Generator 在线中文姓名生成器

Chinese Name Generator 是一款在线中文姓名生成器,可在几秒内生成符合个人需求的中文名字。...
TVAPP:开源电视盒子资源库,一键打造家庭影院

TVAPP:开源电视盒子资源库,一键打造家庭影院

导语 TVAPP 是一个专为 Android TV 电视盒子用户打造的开源影音资源库,集成了影视、直播、游戏等...
2025年12月 每日精选

2025年12月 每日精选

关于每日精选栏目 发现一些不错的资源,点击 这里 快速投稿。 12 月 26 日 .ax 顶级域 目前全球唯一...
最新评论
15220202929 15220202929 怎么用
八对 八对 麻烦大佬更新下【堆新】的友链站名:八对星星描述:极目星视穹苍无界•足履行者大地有疆链接:https://8dui.com图标:https://cf.8dui.com/logo.webp横标:https://cf.8dui.com/logo-w.webp订阅:https://8dui.com/rss.xml
三毛笔记 三毛笔记 已添加
DUINEW DUINEW 已添加贵站,期待贵站友链~博客名称:堆新博客地址:https://duinew.com/博客描述:堆新堆新,引力向新!——堆新(DUINEW)博客头像:https://d.duinew.com/logo.webp横版头像:https://d.duinew.com/logo-w.webp博客订阅:https://duinew.com/rss.xml
hedp hedp 没看懂
bingo bingo 直接生成就可以啦,也可以添加一些选项
满心 满心 申请更新下友联信息,原名:满心记,现名:周天记原域名:qq.mba,现域名:zhoutian.com描述:我在人间混日子
开业吉日 开业吉日 没看明白这个怎么用
开业吉日 开业吉日 beddystories 这个网站太赞了,收藏
热评文章
夸克网盘快传助手提高非VIP下载速度

夸克网盘快传助手提高非VIP下载速度

夸克网盘限速这个大家都知道,不开会员差不多限速在几百 K。那有没有办法在合法合规途径加速下载夸克网盘呢?这里推...
清华大学官方免费DeepSeek教程

清华大学官方免费DeepSeek教程

AI 领域近期最引人注目的焦点当属 DeepSeek,这款由中国创新企业深度求索研发的人工智能工具,正以开放源...
Short-Link 免费开源短网址程序,基于Fastify、Vercel和Supabase构建

Short-Link 免费开源短网址程序,基于Fastify、Vercel和Supabase构建

Short-Link 是一款基于 Fastify、Vercel 和 Supabase 构建的 URL 缩短服务...
国内已部署DeepSeek模型第三方列表 免费满血版联网搜索

国内已部署DeepSeek模型第三方列表 免费满血版联网搜索

本文收集了目前国内已部署 DeepSeek 模型的第三方列表,个个都是免费不限次数的满血版 DeepSeek,...
Chinese Name Generator 在线中文姓名生成器

Chinese Name Generator 在线中文姓名生成器

Chinese Name Generator 是一款在线中文姓名生成器,可在几秒内生成符合个人需求的中文名字。...
BeddyStories 完全免费儿童睡前故事库,让孩子随时随地入睡更轻松

BeddyStories 完全免费儿童睡前故事库,让孩子随时随地入睡更轻松

BeddyStories 是一个致力于为儿童提供优质睡前故事的在线平台,用户可以在这里找到来自世界各地的经典故...
DrawLink:一键生成链接视觉卡片,提升分享点击率

DrawLink:一键生成链接视觉卡片,提升分享点击率

小贴士 :此站或已变迁,但探索不止步。我们已为您备好「类似网站」精选合集,相信其中的发现同样能为您带来惊喜。